做一個可放變數的迴圈
e.g.一年甲班今天要做體檢,大家排著隊,等著進來做體檢.
declare @ACNO int
DECLARE oCursor CURSOR FOR
select oACNO from table--在這裡撈一年甲班的同學學號
OPEN oCursor --開始run cursor
FETCH NEXT FROM oCursor INTO @ACNO --將第一筆資料填入變數
--下一位如果有人
WHILE @@FETCH_STATUS = 0 --檢查是否有讀取到資料; WHILE用來處理迴圈,當為true時則進入迴圈執行
BEGIN
print @ACNO
...在這裡做要做的--做體檢嚕
FETCH NEXT FROM oCursor INTO @ACNO --把下一筆放進去--叫下一位
END
--關閉cursor與參數的關聯
CLOSE oCursor
DEALLOCATE oCursor --將cursor物件從記憶體移除
把要排隊的放到#temp,再用while去撈
declare @min int ,declare @max int
--將資料塞入#temp中 RowID排序
select RowID=identity(INT,1,1) ,ID into #temp from TableA
--取最大數,最小數
select @min =min(RowID),@max=max(RowID) from #temp
while(@min<=@max)
begin
print @min
print @max
--做體檢
set @min+=1;--下一位
end
Ref:
https://dotblogs.com.tw/dorlis.tsao/2010/10/14/18344
cursor是個可怕的東西....
吃效能 效率又差XD
然後你PO錯地方了,要PO在發問的地方
如果不用cursor有什麼方法可以取代呢?
有什麼方法可以測出效能的差異嗎?
While + 排序的TempTable
--將資料塞入#temp中 RowNO排序
DECLARE @Index BIGINT
DECLARE @MAX BIGINT
DECLARE @Min BIGINT
SELECT @MAX = MAX(RowNO),@Min=MIN(RowNO) FROM #temp
WHILE(@Min <= @MAX)
BEGIN
--做你要做的事情
SELECT * FROM #temp WHERE RowNO = @Min
SET @Min=@Min+1
END
對厚,聰明的方法!
來把它補上去,謝謝你哦~~
Oracle 的印象Cursor 效率高速度快呀!